/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.documentar.DAO;

import br.com.documentar.interfacee.InterfaceDAO;
import br.com.documentar.model.CronogramaAtualizacaoModel;
import java.sql.SQLException;
import java.util.Collections;
import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author Santos
 */
public class CronogramaAtualizacaoDAO extends AbstractDAO implements InterfaceDAO<List<CronogramaAtualizacaoModel>, CronogramaAtualizacaoModel> {

    @Override
    public boolean setDados(CronogramaAtualizacaoModel model) {
        String sql = null;

        ConnectDataBase();

        switch (model.getActionScript()) {
            case "I":
                sql = "INSERT INTO \n"
                        + "  `tcro_cronograma_atualizacao`\n"
                        + "(\n"
                        + "  `TCRO_CLIENTE_FK_PK`,\n"
                        + "  `TCRO_COLABORADOR_FK`,\n"
                        + "  `TCRO_VERSAO_FK_PK`,\n"
                        + "  `TCRO_DATA_AGENDADA`,\n"
                        //+ "  `TCRO_OBSERVACAO`,\n"
                        //+ "  `TCRO_DATA_CONCLUSAO`,\n"
                        + "  `TCRO_REMOTA_LOCAL`\n"
                        //+ "  `TCRO_DATA_CANCELAMENTO`,\n"
                        //+ "  `TCRO_MOTIVO_CANCELAMENTO`"
                        + ") \n"
                        + "VALUE (\n"
                        + "  " + model.getClienteModel().getCodigo() + ",\n"
                        + "  " + model.getColaboradorModel().getCodigo() + ",\n"
                        + "  " + model.getVersaoModel().getCodigo() + ",\n"
                        + "  '" + model.getDataAgendada() + "',\n"
                        //+ "  '" + model.getObservacao() + "',\n"
                        //+ "  '" + model.getDataConclusao() + "',\n"
                        + "  '" + model.getLocalRemota() + "'\n"
                        //+ "  '" + model.getDataCancelamento() + "',\n"
                        //+ "  '" + model.getMotivoCancelamento() + "'"
                        + ")";
                break;
            case "U":
                sql = "UPDATE \n"
                        + "  `tcro_cronograma_atualizacao`  \n"
                        + "SET \n"
                        + "  `TCRO_COLABORADOR_FK` = " + model.getColaboradorModel().getCodigo() + ",\n"
                        + "  `TCRO_DATA_AGENDADA` = '" + model.getDataAgendada() + "',\n"
                        + "  `TCRO_OBSERVACAO` = '" + model.getObservacao() + "',\n"
                        + "  `TCRO_REMOTA_LOCAL` = '" + model.getLocalRemota() + "',\n";

                if (!model.getDataConclusao().equals("    -  -  ")) {
                    sql = sql + " `TCRO_DATA_CONCLUSAO` = '" + model.getDataConclusao() + "' ,\n";
                } else {
                    sql = sql + "`TCRO_DATA_CONCLUSAO` = null ,\n";
                }

                if (!model.getDataCancelamento().equals("    -  -  ")) {
                    sql = sql + "`TCRO_DATA_CANCELAMENTO` = '" + model.getDataCancelamento() + "' ,\n";
                } else {
                    sql = sql + "`TCRO_DATA_CANCELAMENTO` = null ,\n";
                }

                sql = sql + "  `TCRO_MOTIVO_CANCELAMENTO` = '" + model.getMotivoCancelamento() + "' \n"
                        + "WHERE \n"
                        + "  `TCRO_CLIENTE_FK_PK` = " + model.getClienteModel().getCodigo() + " "
                        + " and "
                        + "   TCRO_VERSAO_FK_PK = " + model.getVersaoModel().getCodigo() + " "
                        + " and "
                        + "   `TCRO_DATA_AGENDADA` = '" + model.getDataAgendada() + "'";
                break;
            case "U-Cronograma":
                sql = "  UPDATE \n"
                        + "    `tcro_cronograma_atualizacao`  \n"
                        + "  SET \n"
                        + "    `TCRO_OBSERVACAO` = '" + model.getObservacao() + "',\n"
                        + "    `TCRO_DATA_CONCLUSAO` = '" + model.getDataConclusao() + "',\n"
                        + "    `TCRO_REMOTA_LOCAL` = '" + model.getLocalRemota() + "'\n"
                        + "  WHERE \n"
                        + "    `TCRO_CLIENTE_FK_PK` = " + model.getClienteModel().getCodigo() + "\n"
                        + "  and \n"
                        + "    `TCRO_VERSAO_FK_PK` = " + model.getVersaoModel().getCodigo() + " "
                        + "  and \n"
                        + "    `TCRO_DATA_AGENDADA` = '" + model.getDataAgendada() + "' ";
                break;
            case "D":
                sql = "DELETE FROM \n"
                        + "  `tcro_cronograma_atualizacao` \n"
                        + "WHERE \n"
                        + "  `TCRO_CLIENTE_FK_PK` = " + model.getClienteModel().getCodigo() + " "
                        + " and "
                        + "   TCRO_VERSAO_FK_PK = " + model.getVersaoModel().getCodigo() + " "
                        + " and \n"
                        + "   `TCRO_DATA_AGENDADA` = '" + model.getDataAgendada() + "' ";
                break;
        }
        return InsertUpdateDelete(sql, model.getNomeTela());
    }

    @Override
    public List<CronogramaAtualizacaoModel> getDados(CronogramaAtualizacaoModel model) {
        model.setResultSet(null);
        model.getLista().clear();
        String sql = "SELECT \n"
                + "  `cronograma`.`TCRO_CLIENTE_FK_PK`,\n"
                + "  `cliente`.`TCLI_NOME_RAZAO_SOCIAL`,\n"
                + "  `cliente`.`TCLI_NOME_FANTASIA`,\n"
                + "  `cliente`.`TCLI_CODIGO_UNIDADE_NEGOCIO`,\n"
                + "  `cronograma`.`TCRO_COLABORADOR_FK`,\n"
                + "  `colaborador`.`TCOL_NOME`,\n"
                + "  `produto`.`TPRO_CODIGO_PK`,\n"
                + "  `produto`.`TPRO_NOME`,\n"
                + "  `cronograma`.`TCRO_VERSAO_FK_PK`,\n"
                + "  `versao`.`TVER_NOME`,\n"
                + "  `cronograma`.`TCRO_DATA_AGENDADA`,\n"
                + "  `cronograma`.`TCRO_OBSERVACAO`,\n"
                + "  `cronograma`.`TCRO_DATA_CONCLUSAO`,\n"
                + "  `cronograma`.`TCRO_REMOTA_LOCAL`,\n"
                + "  `cronograma`.`TCRO_DATA_CANCELAMENTO`,\n"
                + "  `cronograma`.`TCRO_MOTIVO_CANCELAMENTO`\n"
                + "FROM \n"
                + "  `tcro_cronograma_atualizacao` `cronograma`\n"
                + "    inner join `tcli_cliente` `cliente`\n"
                + "    on `cronograma`.`TCRO_CLIENTE_FK_PK` = `cliente`.`TCLI_CODIGO_PK`\n"
                + "    inner join `tcol_colaborador` `colaborador`\n"
                + "    on `cronograma`.`TCRO_COLABORADOR_FK` =  `colaborador`.`TCOL_CODIGO_PK`  \n"
                + "    inner join `tver_versao` `versao`\n"
                + "    on `cronograma`.`TCRO_VERSAO_FK_PK` = `versao`.`TVER_CODIGO_PK`\n"
                + "	inner join `tpro_produto` `produto`\n"
                + "    on `versao`.`TVER_PRODUTO_FK` = `produto`.`TPRO_CODIGO_PK` ";
        try {
            ConnectDataBase();
            switch (model.getActionScript()) {
                case "C":
                    model.setResultSet(Select(sql, model.getNomeTela()));
                    break;
                case "P":
                    model.setResultSet(Select(sql + " where `cliente`.`TCLI_NOME_RAZAO_SOCIAL` like '%" + model.getClienteModel().getNomeRazao() + "%' OR `cliente`.`TCLI_NOME_FANTASIA` LIKE '%" + model.getClienteModel().getNomeFantasia() + "%' ", model.getNomeTela()));
                    break;
                case "porClienteSemConclusao":
                    model.setResultSet(Select(sql + " where `cronograma`.`TCRO_CLIENTE_FK_PK` = " + model.getClienteModel().getCodigo() + "\n"
                            + "and `cronograma`.`TCRO_DATA_CONCLUSAO` IS NULL", model.getNomeTela()));
                    break;
                case "porAtualizacaoPendente":
                    model.setResultSet(Select(sql + " where `cronograma`.`TCRO_DATA_CONCLUSAO` IS NULL AND `cronograma`.`TCRO_DATA_CANCELAMENTO` IS NULL ", model.getNomeTela()));
                    break;
                case "porRelatorio": {
                    sql = sql + " \n where ";
                    switch (model.getTipoPeriodoRelatorio()) {
                        case '1': {
                            sql = sql + "\n `cronograma`.`TCRO_DATA_CONCLUSAO` between '" + model.getDataPeriodoInicioRelatorio() + "' and '" + model.getDataPeriodoFimRelatorio() + "' ";
                            break;
                        }
                        case '2': {
                            sql = sql + "\n `cronograma`.`TCRO_DATA_AGENDADA` between '" + model.getDataPeriodoInicioRelatorio() + "' and '" + model.getDataPeriodoFimRelatorio() + "' ";
                            break;
                        }
                        case '3': {
                            sql = sql + "\n `cronograma`.`TCRO_DATA_CANCELAMENTO` between '" + model.getDataPeriodoInicioRelatorio() + "' and '" + model.getDataPeriodoFimRelatorio() + "' ";
                            break;
                        }
                        default: {
                            JOptionPane.showMessageDialog(null, "Tipo de Período não informado!!!");
                        }
                    }
                    /**
                     * Filtrar a situação
                     */
                    switch (model.getSituacaoRelatorio()) {
                        case '0': {
                            /**
                             * Todos
                             */
                            break;
                        }
                        case '1': {
                            /**
                             * Concluída
                             */
                            sql = sql + "\n and `cronograma`.`TCRO_DATA_CONCLUSAO` is not null ";
                            break;
                        }
                        case '2': {
                            /**
                             * Aberto
                             */
                            sql = sql + "\n and `cronograma`.`TCRO_DATA_CONCLUSAO` is null "
                                    + " and `cronograma`.`TCRO_DATA_CANCELAMENTO` is null ";
                            break;
                        }
                        case '3': {
                            /**
                             * Cancelado
                             */
                            sql = sql + "\n and `cronograma`.`TCRO_DATA_CANCELAMENTO` is not null ";
                            break;
                        }
                        default: {
                            JOptionPane.showMessageDialog(null, "Situação não informado!!!");
                        }
                    }
                    /**
                     * Filtrar o colaborador
                     */
                    if (model.getColaboradorModelRelatorio().getCodigo() > 0) {
                        sql = sql + "\n and `cronograma`.`TCRO_COLABORADOR_FK` = " + model.getColaboradorModelRelatorio().getCodigo() + " ";
                    } else if (model.getColaboradorModelRelatorio().getCodigo() == 0) {
                        //nada faz, para listar todos os registros
                    } else {
                        JOptionPane.showMessageDialog(null, "Colaborador não informado!!!");
                    }
                    /**
                     * Filtrar o produto
                     */
                    if (model.getVersaoModelRelatorio().getProduto().getCodigo() > 0) {
                        sql = sql + " and `produto`.`TPRO_CODIGO_PK` = '" + model.getVersaoModelRelatorio().getProduto().getCodigo() + "' ";
                    } else if (model.getVersaoModelRelatorio().getProduto().getCodigo() == 0) {
                        //lista tudo
                    } else {
                        JOptionPane.showMessageDialog(null, "Produto não informado!!!");
                    }
                    /**
                     * Filtrar a versão
                     */
                    if (model.getVersaoModelRelatorio().getCodigo() > 0) {
                        sql = sql + " and `cronograma`.`TCRO_VERSAO_FK_PK` = '" + model.getVersaoModelRelatorio().getCodigo() + "' ";
                    } else if (model.getVersaoModelRelatorio().getCodigo() == 0) {
                        //lista tudo
                    } else {
                        JOptionPane.showMessageDialog(null, "Versão não informado!!!");
                    }
                    model.setResultSet(Select(sql, model.getNomeTela()));
                    break;
                }

            }
            while (model.getResultSet().next()) {
                br.com.documentar.model.CronogramaAtualizacaoModel p = new br.com.documentar.model.CronogramaAtualizacaoModel();
                p.getClienteModel().setCodigo(rs.getInt("TCRO_CLIENTE_FK_PK"));
                p.getClienteModel().setNomeRazao(rs.getString("TCLI_NOME_RAZAO_SOCIAL"));
                p.getClienteModel().setNomeFantasia(rs.getString("TCLI_NOME_FANTASIA"));
                p.getClienteModel().setCodigoUnidadeNegocio(rs.getString("TCLI_CODIGO_UNIDADE_NEGOCIO"));
                p.getColaboradorModel().setCodigo(rs.getInt("TCRO_COLABORADOR_FK"));
                p.getColaboradorModel().setNome(rs.getString("TCOL_NOME"));
                p.getVersaoModel().getProduto().setCodigo(rs.getInt("TPRO_CODIGO_PK"));
                p.getVersaoModel().getProduto().setNome(rs.getString("TPRO_NOME"));
                p.getVersaoModel().setCodigo(rs.getInt("TCRO_VERSAO_FK_PK"));
                p.getVersaoModel().setNome(rs.getString("TVER_NOME"));
                p.setDataAgendada(rs.getString("TCRO_DATA_AGENDADA"));
                p.setObservacao(rs.getString("TCRO_OBSERVACAO"));
                p.setDataConclusao(rs.getString("TCRO_DATA_CONCLUSAO"));
                p.setLocalRemota(rs.getString("TCRO_REMOTA_LOCAL").charAt(0));
                p.setDataCancelamento(rs.getString("TCRO_DATA_CANCELAMENTO"));
                p.setMotivoCancelamento(rs.getString("TCRO_MOTIVO_CANCELAMENTO"));
                model.getLista().add(p);
            }
        } catch (SQLException ex) {
            ex.getStackTrace();
        } finally {
            Desconectar(model.getNomeTela());
        }

        Collections.sort(model.getLista());
        return model.getLista();
    }
}
